Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

84
Views
[Javascript]: Merge two arrays of object that has string & array values
const FirstData = [
  {
    title: 'Title 1',
    data: ['foo1', 'foo2', 'foo3', 'foo4', 'foo5'],
  },
  {
    title: 'Title 2',
    data: ['a', 'b', 'c'],
  },
  {
    title: 'Title 3',
    data: ['hello1', 'hello2', 'hello3', 'hello4', 'hello5'],
  },
];

SecondData's data is shuffled behind the scene

const SecondData = [
  {
    title: 'Title 1',
    data: ['foo3', 'foo1', 'foo2'],
  },
  {
    title: 'Title 2',
    data: ['b', 'c', 'a'],
  },
  {
    title: 'Title 3',
    data: ['hello1', 'hello3', 'hello2'],
  },
];

EXPECTED OUTPUT (Must be similar to SecondData but the new strings from FirstData's data must be pushed, added or merged):

[
  {
    title: 'Title 1',
    data: ['foo3', 'foo1', 'foo2', 'foo4', 'foo5'],
  },
  {
    title: 'Title 2',
    data: ['b', 'c', 'a'],
  },
  {
    title: 'Title 3',
    data: ['hello1', 'hello3', 'hello2', 'hello4', 'hello5'],
  },
];
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You could create a map that indexes based on title and then use Set to make sure that you don't add duplicates. Something like this:

const items = {}

firstData.forEach(item => {
 items[item.title] = new Set([...item.data)]
})

secondData.forEach(item => {
 const existingItem = items[item.title]

 if(!existingItem) {
  items[item.title] = new Set([...item.data)]
 } else {
  items[item.title] = new Set([...existingItem, ...item.data])
 }
})

const merged = Object.keys(items).map(title => ({
  title: key,
  data: [...items[key]]
 })
)

about 4 years ago · Juan Pablo Isaza Report

0

I would suggest concatenating the arrays, then using Array.reduce() to group the values by title.

For each entry, we merge the data array using a Set, which will discard any duplicate values in this array.

const FirstData = [ { title: 'Title 1', data: ['foo1', 'foo2', 'foo3', 'foo4', 'foo5'], }, { title: 'Title 2', data: ['a', 'b', 'c'], }, { title: 'Title 3', data: ['hello1', 'hello2', 'hello3', 'hello4', 'hello5'], }, ];

const SecondData = [ { title: 'Title 1', data: ['foo3', 'foo1', 'foo2'], }, { title: 'Title 2', data: ['b', 'c', 'a'], }, { title: 'Title 3', data: ['hello1', 'hello3', 'hello2'], }, ];

// Concatenate our data to get input...    
const input = FirstData.concat(SecondData);

// Group each item by title. 
// For each item, merge the data array using a Set object
const result = Object.values(input.reduce((acc, { title, data }) => { 
    acc[title] = acc[title] || { title, data: [] };
    acc[title].data = [...new Set([...acc[title].data, ...data])];
    return acc;
}, {}));

console.log('Result:', result)

about 4 years ago · Juan Pablo Isaza Report

0

You could take a Set and filter the given array from random values.

const
    merge = (a, b) => [
        ...a,
        ...b.filter((s => v => !s.has(v))(new Set(a)))
    ],
    given = ['foo1', 'foo2', 'foo3', 'foo4', 'foo5'],
    random = ['foo3', 'foo1', 'foo2'],
    result = merge(random, given);

console.log(...result);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!